﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using WpfApplication2.UserControls;
using WpfApplication2.SindicatoWebService;
using System.Windows;
using WpfApplication2.Helpers;
using System.Windows.Input;
using WpfApplication2.Views.Afiliado;
using WpfApplication2.Views.Usuario;

namespace WpfApplication2.ViewModels.Usuario
{
    public class BuscarUsuarioViewModel : ViewModel
    {
        #region properties

        public string DeleteEnabledSource = "../../Images/delete_btn_hover.png";
        public string DeleteDisabledSource = "../../Images/delete_btn.png";

        public SindicatoWebService.Service1SoapClient WS;
        public Instancias Instancias { get; set; }

        public string NombreUsuario
        {
            get
            {
                return nombreUsuario;
            }
            set
            {
                if (nombreUsuario != value)
                {
                    nombreUsuario = value;
                    RaisePropertyChanged("NombreUsuario");
                }
            }
        }
        private string nombreUsuario;

        public string Nombre
        {
            get
            {
                return nombre;
            }
            set
            {
                if (nombre != value)
                {
                    nombre = value;
                    RaisePropertyChanged("Nombre");
                }
            }
        }
        private string nombre;

        public string Apellido
        {
            get
            {
                return apellido;
            }
            set
            {
                if (apellido != value)
                {
                    apellido = value;
                    RaisePropertyChanged("Apellido");
                }
            }
        }
        private string apellido;

        public string Rol
        {
            get
            {
                return rol;
            }
            set
            {
                if (rol != value)
                {
                    rol = value;
                    RaisePropertyChanged("Rol");
                }
            }
        }
        private string rol;

        public List<RolDTO> RolesCollection
        {
            get
            {
                return rolesCollection;
            }
            set
            {
                if (rolesCollection != value)
                {
                    rolesCollection = value;
                    RaisePropertyChanged("RolesCollection");
                }
            }
        }
        private List<RolDTO> rolesCollection;

        public UsuarioDTO[] Resultados
        {
            get
            {
                return resultados;
            }
            set
            {
                if (resultados != value)
                {
                    resultados = value;
                    RaisePropertyChanged("Resultados");
                }
            }
        }
        private UsuarioDTO[] resultados;


        public UsuarioDTO Usuario
        {
            get
            {
                return usuario;
            }
            set
            {
                if (usuario != value)
                {
                    usuario = value;
                    RaisePropertyChanged("Usuario");
                }
            }
        }
        private UsuarioDTO usuario;


        public Visibility ResultsVisibility
        {
            get
            {
                return resultsVisibility;
            }
            set
            {
                if (resultsVisibility != value)
                {
                    resultsVisibility = value;
                    RaisePropertyChanged("ResultsVisibility");
                }
            }
        }
        private Visibility resultsVisibility;

        public Visibility ResultsListVisibility
        {
            get
            {
                return resultsListVisibility;
            }
            set
            {
                if (resultsListVisibility != value)
                {
                    resultsListVisibility = value;
                    RaisePropertyChanged("ResultsListVisibility");
                }
            }
        }
        private Visibility resultsListVisibility;

        public Visibility NoResultsVisibility
        {
            get
            {
                return noResultsVisibility;
            }
            set
            {
                if (noResultsVisibility != value)
                {
                    noResultsVisibility = value;
                    RaisePropertyChanged("NoResultsVisibility");
                }
            }
        }
        private Visibility noResultsVisibility;

        


        #endregion

        public BuscarUsuarioViewModel(Instancias instancias)
        {
            WS = new Service1SoapClient();
            Instancias = instancias;
            ResultsVisibility = Visibility.Collapsed;
            var roles = new List<RolDTO> { new RolDTO { RolId = 0, Nombre = "Todos los Roles" } };
            foreach (var rol in WS.GetRoles())
            {
                roles.Add(rol);
            }
            RolesCollection = roles;
            Rol = "0";
        }


        #region Buscar Usuario

        private DelegateCommand buscarUsuario;

        public ICommand BuscarUsuario
        {
            get
            {
                if (buscarUsuario == null)
                {
                    buscarUsuario = new DelegateCommand(Buscar, CanExecute);
                }
                return buscarUsuario;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void Buscar()
        {
            var rolBuscar = string.IsNullOrEmpty(Rol) ? 0 : Convert.ToInt32(Rol);
            Resultados = WS.BuscarUsuarios(Nombre, Apellido, NombreUsuario, rolBuscar);
                   
            ResultsVisibility = Visibility.Visible;
            if (Resultados.Count() > 0)
            {
                ResultsListVisibility = Visibility.Visible;
                NoResultsVisibility = Visibility.Collapsed;
            }
            else
            {
                ResultsListVisibility = Visibility.Collapsed;
                NoResultsVisibility = Visibility.Visible;
            }
        }

        #endregion


        #region Editar Usuario

        private DelegateCommand editarUsuario;

        public ICommand EditarUsuario
        {
            get
            {
                if (editarUsuario == null)
                {
                    editarUsuario = new DelegateCommand(Editar, CanExecute);
                }
                return editarUsuario;
            }
        }

        private void Editar()
        {
            if (Usuario != null)
                Instancias.FrameContent.Content = new EditarUsuario(Instancias, Usuario);
            else
                Instancias.ModalDialog.ShowHandlerDialog("Debe selecccionar un usuario.");
        }

        #endregion


        #region Consultar Usuario

        private DelegateCommand consultarUsuario;

        public ICommand ConsultarUsuario
        {
            get
            {
                if (consultarUsuario == null)
                {
                    consultarUsuario = new DelegateCommand(Consultar, CanExecute);
                }
                return consultarUsuario;
            }
        }

        private void Consultar()
        {
            if (Usuario != null)
                Instancias.FrameContent.Content = new ConsultarUsuario(Instancias, Usuario);
            else
                Instancias.ModalDialog.ShowHandlerDialog("Debe selecccionar un usuario.");
        }

        #endregion

        #region Eliminar Usuario

        private DelegateCommand eliminarUsuario;

        public ICommand EliminarUsuario
        {
            get
            {
                if (eliminarUsuario == null)
                {
                    eliminarUsuario = new DelegateCommand(Eliminar, CanExecute);
                }
                return eliminarUsuario;
            }
        }

        private void Eliminar()
        {
            if (Usuario != null)
            {
                var mensaje = String.Format("Esta seguro que desea eliminar al usuario: {0} {1}?", Usuario.Nombre.Trim(), Usuario.Apellido.Trim());
                var eliminar = Instancias.Confirmacion.ShowHandlerDialog(mensaje);
                if (eliminar)
                {
                    WS.EliminarUsuario(Usuario.Id);
                    Instancias.ModalDialog.ShowHandlerDialog("El usuario se ha eliminado correctamente.");
                    Buscar();
                }
            }
            else
                Instancias.ModalDialog.ShowHandlerDialog("Debe selecccionar un usuario.");
        }

        #endregion

    }
}

